let express = require('express');
let User = require('./models/user');
// 密码加密
let md5 = require('blueimp-md5');
let router = express.Router();

router.get('/', function (req, res) {
  // console.log(req.session.user);
  res.render('index.html', {
    user: req.session.user
  });
})

router.get('/login', function (req, res) {
  res.render('login.html');
})

router.post('/login', function (req, res) {
  // 获取表单数据
  let body = req.body;
  // console.log(body);
  // 查询数据库是否正确
  // 发送响应数据
  User.findOne({
    email: body.email,
    password: md5(md5(body.password))
  }, function (err, user) {
    if (err) {
      return res.status(500).json({
        err_code: 500,
        message: err.message
      })
    }
    if (!user) {
      return res.status(200).json({
        err_code: 1,
        message: 'Email or password is invalid.'
      })
    }
    // 用户存在且无误，登录成功，记录登录状态
    req.session.user = user;
    res.status(200).json({
      err_code: 0,
      message: "ok"
    })
  })
})

router.get('/register', function (req, res) {
  res.render('register.html');
})

router.post('/register', function (req, res) {
  // 1.获取表单提交的数据
  // req.body
  // 2.操作数据库
  //    判断用户是否存在，若存在不允许注册，不存在，注册新建用户
  // 3.发送响应
  let body = req.body;
  User.findOne({
    // 判断邮箱或者昵称是否存在
    $or: [{
        email: body.email
      },
      {
        nickname: body.nickname
      }
    ]
  }, function (err, data) {
    if (err) {
      return res.status(500).json({
        success: false,
        message: 'Server Error'
      })
    }
    // console.log(data);
    // 设置err_code来给前端来验证状态
    if (data) {
      // 邮箱或者昵称已存在
      return res.status(200).json({
        success: true,
        err_code: 1,
        message: 'Email or nickname has already in DB'
      })
    }
    // 若不存在该用户，则new一个出来并存入数据库
    body.password = md5(md5(body.password)); // 给密码进行加密,再重复加密，安全性更高
    new User(body).save(function (err, user) {
      if (err) {
        return res.status(500).json({
          success: false,
          err_code: 500,
          message: 'Internal error'
        })
      }
      // 注册成功，使用Session记录用户的登录状态
      req.session.user = user;

      // 响应JSON格式字符串
      // Express提供了一个响应方法：json。可以自动帮你把对象转为字符串再发送给浏览器
      res.status(200).json({
        err_code: 0,
        success: true,
        message: 'Ok'
      });
      // 失败的重定向：服务端控制的重定向只能控制的同步的，异步的请求是无法重定向的
      // res.redirect('/');
    })
  })
})


module.exports = router;